package day29;

import java.io.*;

/**
 * @author ZJX
 * @version 1.0
 * @descption
 * @since 2025/11/5 19:11
 */
public class Day22 {

//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        PrintWriter out = new PrintWriter(System.out);
//        char[] arrayA = br.readLine().toCharArray();
//        char[] arrayB = br.readLine().toCharArray();
//        int lenA = arrayA.length;
//        int lenB = arrayB.length;
//        // 记录初始错位 无法改变
//        int count = 0;
//        int len = lenB - lenA;
//        for (int i = 0; i <= len; i++) {
//            int cur = 0;
//            for (int j = 0; j < lenA; j++) {
//                if (arrayA[j] == arrayB[i + j]) {
//                    cur++;
//                }
//            }
//            if (cur > count) {
//                count = cur;
//            }
//        }
//        out.println(lenA - count);
//        out.close();
//    }

//    public static void main(String[] args) throws IOException {
//        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//        PrintWriter out = new PrintWriter(System.out);
//        in.nextToken();
//        int n = (int) in.nval; // 数组长度
//        int[] nums = new int[n];
//        int max = 0;
//        for (int i = 0; i < n; i++) {
//            in.nextToken();
//            nums[i] = (int) in.nval;
//            max = Math.max(max, nums[i]);
//        }
//        if (max % 2 != 0) {
//            max *= 2;
//        }
//        boolean flag = true;
//        // 判断能否用操作(每次乘2)将数组全部数组变成此时的max
//        for (int i = 0; i < n; i++) {
//            int cur = nums[i];
//            while (cur != max) {
//                cur *= 2;
//                if (cur > max) {
//                    flag = false;
//                    break;
//                }
//            }
//            if (!flag){
//                break;
//            }
//        }
//        out.println(flag ? "YES" : "NO");
//        out.close();
//    }

    public static void main(String[] args) throws IOException {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(System.out);
        in.nextToken();
        int v = (int) in.nval; // 箱子容量
        in.nextToken();
        int n = (int) in.nval; // n个物品
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            in.nextToken();
            nums[i] = (int) in.nval;
        }
        int[] dp = new int[v + 1]; // dp[j]为容量为j时装入的最大体积

        // 先遍历物品
        for (int i = 0; i < n; i++) {
            int weight = nums[i];
            for (int j = v; j >= weight; j--) {
                dp[j] = Math.max(dp[j], dp[j - weight] + weight);
            }
        }

        out.println(v - dp[v]);
        out.close();
    }
}

